// 题目描述：
// 给定字符串 s 和 t ，判断 s 是否为 t 的子序列。

// 字符串的一个子序列是原始字符串删除一些（也可以不删除）字符而不改变剩余字符相对位置形成的新字符串。（例如，"ace"是"abcde"的一个子序列，而"aec"不是）。

// 自己的答案：
/**
 * @param {string} s
 * @param {string} t
 * @return {boolean}
 */
var isSubsequence = function (s, t) {
    let sIndex = 0
    let tStartIndex = t.indexOf(s[0])
    if (tStartIndex === -1 && s.length !== 0) { // s.length !== 0 是为了让 s="" 的情况下返回 true
        return false
    }
    for (let tIndex = tStartIndex; tIndex < t.length; tIndex++) {
        if (sIndex < s.length && t[tIndex] === s[sIndex]) {
            ++sIndex
        }
    }
    return sIndex === s.length
};
console.log(isSubsequence("abc", "ahbgdc"))


// Gpt答案：
function isSubsequence(s, t) {
    let i = 0, j = 0; // 双指针，i 指向 s，j 指向 t
    
    while (i < s.length && j < t.length) {
        if (s[i] === t[j]) {
            i++; // 找到了 s 的一个字符，移动 s 的指针
        }
        j++; // 无论是否匹配，都移动 t 的指针
    }
    
    // 如果 i 等于 s 的长度，说明 s 是 t 的子序列
    return i === s.length;
}
 
// 示例测试
console.log(isSubsequence("abc", "ahbgdc")); // 输出: true
console.log(isSubsequence("axc", "ahbgdc")); // 输出: false

// 官方答案：
var isSubsequence = function (s, t) {
    if (s.length === 0) {
        return true;
    }
    let i = 0;
    for (const c of t) {
        if (s[i] === c && ++i === s.length) { // 所有字符匹配完毕
            return true; // s 是 t 的子序列
        }
    }
    return false;
};